package com.order.manager.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import com.order.manager.Model.MenuInfo;
import com.order.manager.service.MenuInfoService;
import com.order.manager.mapper.MenuInfoMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 24862
 * @description 针对表【menu_info】的数据库操作Service实现
 * @createDate 2024-04-08 15:32:15
 */
@Service
public class MenuInfoServiceImpl extends ServiceImpl<MenuInfoMapper, MenuInfo>
        implements MenuInfoService{

    /**
     * 菜单信息Mapper接口，用于数据库操作
     */
    @Resource
    MenuInfoMapper mapper;

    /**
     * 根据店铺ID分页查询有效菜单列表
     *
     * @param shopId   店铺ID
     * @param menuName 菜单名称（暂未使用该参数）
     * @param page     当前页码
     * @param item     每页显示数量
     * @return 分页包装的菜单信息列表（仅包含state=1的有效菜单）
     *
     * @implNote 该方法未使用menuName参数，仅根据shopId和state=1进行查询
     */
    @Override
    //PageInfo查询结果分页展示
    public PageInfo<MenuInfo> queryByShop(String shopId, String menuName, int page, int item) {
        // 开启分页功能，设置当前页码和每页显示数量
        PageMethod.startPage(page, item);

        // 构建查询条件：根据店铺ID和有效状态查询菜单
        List<MenuInfo> menuInfos = mapper.selectList(new QueryWrapper<MenuInfo>()
                //对应 SQL：WHERE state = 1
                .eq("shop_id", shopId)    // 筛选指定店铺
                //对应 SQL：WHERE state = 1
                .eq("state", 1)           // 仅查询有效状态的菜单
        );
        // new PageInfo<>(orderForSenders) 会自动：
        //获取当前页数据（orderForSenders）
        //计算总记录数（通过执行 SELECT COUNT(*)）
        //计算总页数、当前页码等信息
        return new PageInfo<>(menuInfos);
    }

    /**
     * 根据菜单名称模糊搜索分页查询有效菜单
     *
     * @param menuName 菜单名称关键词
     * @param page     当前页码
     * @param item     每页显示数量
     * @return 分页包装的菜单信息列表（菜单名称包含关键词且state=1）
     */
    @Override
    //PageInfo查询结果分页展示
    public PageInfo<MenuInfo> queryByName(String menuName, int page, int item) {
        // 开启分页功能
        PageMethod.startPage(page, item);

        // 构建模糊查询条件：菜单名称包含关键词且状态为有效
        List<MenuInfo> menuInfos = mapper.selectList(new QueryWrapper<MenuInfo>()
               // 对应 SQL：WHERE menu_name LIKE '%${menuName}%'
                .like("menu_name", menuName)  // 模糊匹配菜单名称
                //对应 SQL：WHERE state = 1
                .eq("state", 1)               // 仅查询有效状态
        );
        // new PageInfo<>(orderForSenders) 会自动：
        //获取当前页数据（orderForSenders）
        //计算总记录数（通过执行 SELECT COUNT(*)）
        //计算总页数、当前页码等信息
        return new PageInfo<>(menuInfos);
    }

    /**
     * 店铺端分页查询所有菜单（包含无效状态）
     *
     * @param shopId   店铺ID
     * @param menuName 菜单名称（暂未使用该参数）
     * @param page     当前页码
     * @param item     每页显示数量
     * @return 分页包装的菜单信息列表（包含所有状态的菜单）
     *
     * @implNote 该方法未使用menuName参数，也不限制菜单状态，用于店铺端管理所有菜单
     */
    @Override
    public PageInfo<MenuInfo> ShopQueryByShop(String shopId, String menuName, int page, int item) {
        // 开启分页
        PageMethod.startPage(page, item);

        // 构建查询条件：仅根据店铺ID查询，不限制菜单状态
        List<MenuInfo> menuInfos = mapper.selectList(new QueryWrapper<MenuInfo>()
                //对应 SQL：WHERE shop_id =shopId
                .eq("shop_id", shopId)  // 筛选指定店铺
        );
        // new PageInfo<>(orderForSenders) 会自动：
        //获取当前页数据（orderForSenders）
        //计算总记录数（通过执行 SELECT COUNT(*)）
        //计算总页数、当前页码等信息
        return new PageInfo<>(menuInfos);
    }
}